using System.Collections.Generic;
using System.Net;

namespace LDNS.SDK.Commands.Models
{
    /// <summary>
    /// 添加域名解析记录命令
    /// 用于添加新的域名解析记录
    /// 作者：huobing
    /// </summary>
    public sealed class AddCommand : BaseCommand<DefaultCommandResult>
    {
        public const string NAME = "ADD";
        public override string Name => NAME;
        public override string Format => "ADD <ip> <domain> [record_type] [ttl]";
        public override string Description => "添加DNS记录";
        public override CommandPermission Permission => CommandPermission.User;
        public override IEnumerable<string> Aliases => new[] { "ADDRECORD", "ADD_RECORD" };
        public override bool Validate(string[] args, out string error)
        {
            error = string.Empty;
            if (args.Length < 2) 
            { 
                error = "ADD 需要至少两个参数，格式为: ADD <ip> <domain> [record_type] [ttl]";
                return false; 
            }
            
            // 检查第一个参数是否为有效的IP地址
            if (!IPAddress.TryParse(args[0], out _)) 
            { 
                // 尝试智能判断：检查第二个参数是否为IP地址而第一个不是
                if (!IPAddress.TryParse(args[0], out _) && IPAddress.TryParse(args[1], out _))
                {
                    error = "ADD 参数顺序错误！正确格式为: ADD <ip> <domain> [record_type] [ttl]"; 
                }
                else
                {
                    error = "ADD 的 ip 参数无效，请检查第一个参数是否为有效的IP地址";
                }
                return false; 
            }
            
            if (args.Length >= 4 && !int.TryParse(args[3], out _)) 
            { 
                error = "ADD 的 TTL 必须为整数";
                return false; 
            }
            
            return true;
        }
    }
}